ambient25 2.2.0
Loading...
Searching...
No Matches
ambient25.h
Go to the documentation of this file.
1/****************************************************************************
2** Copyright (C) 2020 MikroElektronika d.o.o.
3** Contact: https://www.mikroe.com/contact
4**
5** Permission is hereby granted, free of charge, to any person obtaining a copy
6** of this software and associated documentation files (the "Software"), to deal
7** in the Software without restriction, including without limitation the rights
8** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9** copies of the Software, and to permit persons to whom the Software is
10** furnished to do so, subject to the following conditions:
11** The above copyright notice and this permission notice shall be
12** included in all copies or substantial portions of the Software.
13**
14** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20** USE OR OTHER DEALINGS IN THE SOFTWARE.
21****************************************************************************/
22
27
28#ifndef AMBIENT25_H
29#define AMBIENT25_H
30
31#ifdef __cplusplus
32extern "C"{
33#endif
34
39#ifdef PREINIT_SUPPORTED
40#include "preinit.h"
41#endif
42
43#ifdef MikroCCoreVersion
44 #if MikroCCoreVersion >= 1
45 #include "delays.h"
46 #endif
47#endif
48
49#include "drv_digital_out.h"
50#include "drv_digital_in.h"
51#include "drv_i2c_master.h"
52
58
63
68
73#define AMBIENT25_REG_MOD_CHANNEL_CTRL 0x40
74#define AMBIENT25_REG_ENABLE 0x80
75#define AMBIENT25_REG_MEAS_MODE0 0x81
76#define AMBIENT25_REG_MEAS_MODE1 0x82
77#define AMBIENT25_REG_SAMPLE_TIME0 0x83
78#define AMBIENT25_REG_SAMPLE_TIME1 0x84
79#define AMBIENT25_REG_ALS_NR_SAMPLES0 0x85
80#define AMBIENT25_REG_ALS_NR_SAMPLES1 0x86
81#define AMBIENT25_REG_FD_NR_SAMPLES0 0x87
82#define AMBIENT25_REG_FD_NR_SAMPLES1 0x88
83#define AMBIENT25_REG_WTIME 0x89
84#define AMBIENT25_REG_AILT0 0x8A
85#define AMBIENT25_REG_AILT1 0x8B
86#define AMBIENT25_REG_AILT2 0x8C
87#define AMBIENT25_REG_AIHT0 0x8D
88#define AMBIENT25_REG_AIHT1 0x8E
89#define AMBIENT25_REG_AIHT2 0x8F
90#define AMBIENT25_REG_AUX_ID 0x90
91#define AMBIENT25_REG_REV_ID 0x91
92#define AMBIENT25_REG_ID 0x92
93#define AMBIENT25_REG_STATUS 0x93
94#define AMBIENT25_REG_ALS_STATUS 0x94
95#define AMBIENT25_REG_ALS_DATA0_LSB 0x95
96#define AMBIENT25_REG_ALS_DATA0_MSB 0x96
97#define AMBIENT25_REG_ALS_DATA1_LSB 0x97
98#define AMBIENT25_REG_ALS_DATA1_MSB 0x98
99#define AMBIENT25_REG_ALS_STATUS2 0x9B
100#define AMBIENT25_REG_STATUS2 0x9D
101#define AMBIENT25_REG_STATUS3 0x9E
102#define AMBIENT25_REG_STATUS4 0x9F
103#define AMBIENT25_REG_STATUS5 0xA0
104#define AMBIENT25_REG_CFG0 0xA1
105#define AMBIENT25_REG_CFG1 0xA2
106#define AMBIENT25_REG_CFG2 0xA3
107#define AMBIENT25_REG_CFG3 0xA4
108#define AMBIENT25_REG_CFG4 0xA5
109#define AMBIENT25_REG_CFG5 0xA6
110#define AMBIENT25_REG_CFG6 0xA7
111#define AMBIENT25_REG_CFG7 0xA8
112#define AMBIENT25_REG_CFG8 0xA9
113#define AMBIENT25_REG_CFG9 0xAA
114#define AMBIENT25_REG_AGC_NR_SAMPLES0 0xAC
115#define AMBIENT25_REG_AGC_NR_SAMPLES1 0xAD
116#define AMBIENT25_REG_TRIGGER_MODE 0xAE
117#define AMBIENT25_REG_CONTROL 0xB1
118#define AMBIENT25_REG_INTENAB 0xBA
119#define AMBIENT25_REG_SIEN 0xBB
120#define AMBIENT25_REG_MOD_COMP_CFG1 0xCE
121#define AMBIENT25_REG_MEAS_SEQR_FD_0 0xCF
122#define AMBIENT25_REG_MEAS_SEQR_ALS_1 0xD0
123#define AMBIENT25_REG_MEAS_SEQR_APERS_AND_VSYNC_WAIT 0xD1
124#define AMBIENT25_REG_MEAS_SEQR_RESIDUAL_0 0xD2
125#define AMBIENT25_REG_MEAS_SEQR_RESIDUAL_1_AND_WAIT 0xD3
126#define AMBIENT25_REG_MEAS_SEQR_STEP0_MOD_GAINX_L 0xD4
127#define AMBIENT25_REG_MEAS_SEQR_STEP1_MOD_GAINX_L 0xD6
128#define AMBIENT25_REG_MEAS_SEQR_STEP2_MOD_GAINX_L 0xD8
129#define AMBIENT25_REG_MEAS_SEQR_STEP3_MOD_GAINX_L 0xDA
130#define AMBIENT25_REG_MEAS_SEQR_STEP0_MOD_PHDX_SMUX_L 0xDC
131#define AMBIENT25_REG_MEAS_SEQR_STEP0_MOD_PHDX_SMUX_H 0xDD
132#define AMBIENT25_REG_MEAS_SEQR_STEP1_MOD_PHDX_SMUX_L 0xDE
133#define AMBIENT25_REG_MEAS_SEQR_STEP1_MOD_PHDX_SMUX_H 0xDF
134#define AMBIENT25_REG_MEAS_SEQR_STEP2_MOD_PHDX_SMUX_L 0xE0
135#define AMBIENT25_REG_MEAS_SEQR_STEP2_MOD_PHDX_SMUX_H 0xE1
136#define AMBIENT25_REG_MEAS_SEQR_STEP3_MOD_PHDX_SMUX_L 0xE2
137#define AMBIENT25_REG_MEAS_SEQR_STEP3_MOD_PHDX_SMUX_H 0xE3
138#define AMBIENT25_REG_MOD_CALIB_CFG0 0xE4
139#define AMBIENT25_REG_MOD_CALIB_CFG2 0xE6
140#define AMBIENT25_REG_VSYNC_PERIOD0 0xF2
141#define AMBIENT25_REG_VSYNC_PERIOD1 0xF3
142#define AMBIENT25_REG_VSYNC_PERIOD_TARGET0 0xF4
143#define AMBIENT25_REG_VSYNC_PERIOD_TARGET1 0xF5
144#define AMBIENT25_REG_VSYNC_CONTROL 0xF6
145#define AMBIENT25_REG_VSYNC_CFG 0xF7
146#define AMBIENT25_REG_VSYNC_GPIO_INT 0xF8
147#define AMBIENT25_REG_MOD_FIFO_DATA_CFG0 0xF9
148#define AMBIENT25_REG_MOD_FIFO_DATA_CFG1 0xFA
149#define AMBIENT25_REG_FIFO_THR 0xFC
150#define AMBIENT25_REG_FIFO_STATUS0 0xFD
151#define AMBIENT25_REG_FIFO_STATUS1 0xFE
152#define AMBIENT25_REG_FIFO_DATA 0xFF
153 // ambient25_reg
155
160
165
170#define AMBIENT25_ENABLE_FDEN 0x40
171#define AMBIENT25_ENABLE_AEN 0x02
172#define AMBIENT25_ENABLE_PON 0x01
173
178#define AMBIENT25_WTIME_DEFAULT 0x46
179
184#define AMBIENT25_TRIGGER_MODE_OFF 0x00
185#define AMBIENT25_TRIGGER_MODE_NORMAL 0x01
186#define AMBIENT25_TRIGGER_MODE_LONG 0x02
187#define AMBIENT25_TRIGGER_MODE_FAST 0x03
188#define AMBIENT25_TRIGGER_MODE_FASTLONG 0x04
189#define AMBIENT25_TRIGGER_MODE_VSYNC 0x05
190#define AMBIENT25_TRIGGER_MODE_MASK 0x07
191
196#define AMBIENT25_INTENAB_MIEN 0x80
197#define AMBIENT25_INTENAB_AIEN 0x08
198#define AMBIENT25_INTENAB_FIEN 0x04
199#define AMBIENT25_INTENAB_SIEN 0x01
200
205#define AMBIENT25_MEAS_MODE1_MOD_FIFO_FD_END_MARKER_WEN 0x80
206#define AMBIENT25_MEAS_MODE1_MOD_FIFO_FD_CHECKSUM_WEN 0x40
207#define AMBIENT25_MEAS_MODE1_MOD_FIFO_FD_GAIN_WEN 0x20
208#define AMBIENT25_MEAS_MODE1_ALS_MSB_POSITION_DEFAULT 0x08
209#define AMBIENT25_MEAS_MODE1_ALS_MSB_POSITION_MASK 0x1F
210
215#define AMBIENT25_GAIN_MOD1_HALF 0x00
216#define AMBIENT25_GAIN_MOD1_1X 0x10
217#define AMBIENT25_GAIN_MOD1_2X 0x20
218#define AMBIENT25_GAIN_MOD1_4X 0x30
219#define AMBIENT25_GAIN_MOD1_8X 0x40
220#define AMBIENT25_GAIN_MOD1_16X 0x50
221#define AMBIENT25_GAIN_MOD1_32X 0x60
222#define AMBIENT25_GAIN_MOD1_64X 0x70
223#define AMBIENT25_GAIN_MOD1_128X 0x80
224#define AMBIENT25_GAIN_MOD1_256X 0x90
225#define AMBIENT25_GAIN_MOD1_512X 0xA0
226#define AMBIENT25_GAIN_MOD1_1024X 0xB0
227#define AMBIENT25_GAIN_MOD1_2048X 0xC0
228#define AMBIENT25_GAIN_MOD1_4096X 0xD0
229#define AMBIENT25_GAIN_MOD0_HALF 0x00
230#define AMBIENT25_GAIN_MOD0_1X 0x01
231#define AMBIENT25_GAIN_MOD0_2X 0x02
232#define AMBIENT25_GAIN_MOD0_4X 0x03
233#define AMBIENT25_GAIN_MOD0_8X 0x04
234#define AMBIENT25_GAIN_MOD0_16X 0x05
235#define AMBIENT25_GAIN_MOD0_32X 0x06
236#define AMBIENT25_GAIN_MOD0_64X 0x07
237#define AMBIENT25_GAIN_MOD0_128X 0x08
238#define AMBIENT25_GAIN_MOD0_256X 0x09
239#define AMBIENT25_GAIN_MOD0_512X 0x0A
240#define AMBIENT25_GAIN_MOD0_1024X 0x0B
241#define AMBIENT25_GAIN_MOD0_2048X 0x0C
242#define AMBIENT25_GAIN_MOD0_4096X 0x0D
243
248#define AMBIENT25_FIFO_THR_DEFAULT 5
249
254#define AMBIENT25_CONTROL_SOFT_RESET 0x08
255#define AMBIENT25_CONTROL_FIFO_CLR 0x02
256#define AMBIENT25_CONTROL_CLEAR_SAI_ACTIVE 0x01
257
262#define AMBIENT25_ALS_DATA_SATURATION 0xFFFF
263
268#define AMBIENT25_DEVICE_ID 0x5C
269
275#define AMBIENT25_DEVICE_ADDRESS 0x39
276 // ambient25_set
278
283
288
293#define AMBIENT25_MAP_MIKROBUS( cfg, mikrobus ) \
294 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
295 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
296 cfg.en = MIKROBUS( mikrobus, MIKROBUS_RST ); \
297 cfg.vsync = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
298 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
299 // ambient25_map // ambient25
302
307typedef struct
308{
309 uint16_t als_data_0;
310 uint16_t als_data_1;
311
313
318typedef struct
319{
320 // Output pins
321 digital_out_t en;
322 digital_out_t vsync;
323
324 // Input pins
325 digital_in_t int_pin;
326
327 // Modules
328 i2c_master_t i2c;
329
330 // I2C slave address
332
334
339typedef struct
340{
341 pin_name_t scl;
342 pin_name_t sda;
343
344 pin_name_t en;
345 pin_name_t vsync;
346 pin_name_t int_pin;
347
348 uint32_t i2c_speed;
349 uint8_t i2c_address;
350
352
363
369
380
395
409
424err_t ambient25_write_regs ( ambient25_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
425
440err_t ambient25_read_regs ( ambient25_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
441
454err_t ambient25_write_reg ( ambient25_t *ctx, uint8_t reg, uint8_t data_in );
455
468err_t ambient25_read_reg ( ambient25_t *ctx, uint8_t reg, uint8_t *data_out );
469
483err_t ambient25_write_reg_word ( ambient25_t *ctx, uint8_t reg, uint16_t data_in );
484
498err_t ambient25_read_reg_word ( ambient25_t *ctx, uint8_t reg, uint16_t *data_out );
499
511
521
531
541void ambient25_set_vsync_pin ( ambient25_t *ctx, uint8_t state );
542
552
564
576
588err_t ambient25_read_fifo_size ( ambient25_t *ctx, uint16_t *fifo_size );
589
603
604#ifdef __cplusplus
605}
606#endif
607#endif // AMBIENT25_H
608 // ambient25
610
611// ------------------------------------------------------------------------ END
ambient25_return_value_t
Ambient 25 Click return value data.
Definition ambient25.h:358
@ AMBIENT25_OK
Definition ambient25.h:359
@ AMBIENT25_ERROR
Definition ambient25.h:360
void ambient25_enable_device(ambient25_t *ctx)
Ambient 25 enable device function.
err_t ambient25_init(ambient25_t *ctx, ambient25_cfg_t *cfg)
Ambient 25 initialization function.
err_t ambient25_read_regs(ambient25_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
Ambient 25 read regs function.
err_t ambient25_read_reg(ambient25_t *ctx, uint8_t reg, uint8_t *data_out)
Ambient 25 read reg function.
err_t ambient25_read_fifo_size(ambient25_t *ctx, uint16_t *fifo_size)
Ambient 25 read fifo size function.
void ambient25_set_vsync_pin(ambient25_t *ctx, uint8_t state)
Ambient 25 set vsync pin state function.
err_t ambient25_check_communication(ambient25_t *ctx)
Ambient 25 check communication function.
uint8_t ambient25_get_int_pin(ambient25_t *ctx)
Ambient 25 get int pin state function.
err_t ambient25_read_data(ambient25_t *ctx, ambient25_data_t *data_out)
Ambient 25 read data function.
err_t ambient25_write_regs(ambient25_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
Ambient 25 write regs function.
err_t ambient25_write_reg_word(ambient25_t *ctx, uint8_t reg, uint16_t data_in)
Ambient 25 write reg word function.
void ambient25_cfg_setup(ambient25_cfg_t *cfg)
Ambient 25 configuration object setup function.
err_t ambient25_soft_reset(ambient25_t *ctx)
Ambient 25 soft reset function.
err_t ambient25_default_cfg(ambient25_t *ctx)
Ambient 25 default configuration function.
void ambient25_disable_device(ambient25_t *ctx)
Ambient 25 disable device function.
err_t ambient25_write_reg(ambient25_t *ctx, uint8_t reg, uint8_t data_in)
Ambient 25 write reg function.
err_t ambient25_read_reg_word(ambient25_t *ctx, uint8_t reg, uint16_t *data_out)
Ambient 25 read reg word function.
err_t ambient25_clear_fifo(ambient25_t *ctx)
Ambient 25 clear fifo function.
Ambient 25 Click configuration object.
Definition ambient25.h:340
pin_name_t vsync
Definition ambient25.h:345
uint32_t i2c_speed
Definition ambient25.h:348
pin_name_t scl
Definition ambient25.h:341
pin_name_t en
Definition ambient25.h:344
pin_name_t int_pin
Definition ambient25.h:346
pin_name_t sda
Definition ambient25.h:342
uint8_t i2c_address
Definition ambient25.h:349
Ambient 25 Click data object.
Definition ambient25.h:308
uint16_t als_data_1
Definition ambient25.h:310
uint16_t als_data_0
Definition ambient25.h:309
Ambient 25 Click context object.
Definition ambient25.h:319
digital_out_t vsync
Definition ambient25.h:322
digital_in_t int_pin
Definition ambient25.h:325
i2c_master_t i2c
Definition ambient25.h:328
digital_out_t en
Definition ambient25.h:321
uint8_t slave_address
Definition ambient25.h:331